/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.japo.java.basics.samples;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

/**
 *
 * @author Javier Evelio Sáez García
 */
class GEV extends WindowAdapter {

    private IGU igu;
    private final String F_BLOQUEO = "instancia.lock";

    GEV(IGU igu) {
        this.igu = igu;
    }

    @Override
    public void windowOpened(WindowEvent ae) {
        try {
            activarInstancia();
        } catch (Exception e) {
            cerrarPrograma();
        }
    }

    @Override
    public void windowClosing(WindowEvent ae) {
        try {
            desactivarInstancia();
        } catch (Exception e) {
            cerrarPrograma();
        }
    }

    private void activarInstancia() throws Exception {
        File f = new File(F_BLOQUEO);
        boolean existeOK = f.exists();
        if (!existeOK) {
            f.createNewFile();
        } else {
            //cuando lanzamos un throw sin ese es que lo lanzamos nosotros
            throw new Exception("Ya hay otra instancia");
        }

    }

    private void desactivarInstancia() throws Exception {
        File f = new File(F_BLOQUEO);
        boolean existeOK = f.exists();
        if (existeOK) {
            f.delete();
        } else {
            throw new Exception("Problemas con la anulacion");
        }
    }

    private void cerrarPrograma() {
        //esta es la mejor forma de salir de un programa
        igu.setVisible(false);//hace que no sea visible
        igu.dispose();//obliga al interfaz todos los recursos que utiliza
        System.exit(0);//elimina el hilo de ejecucion del main
    }
}
